﻿using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Security.Cryptography.X509Certificates;
using System.Xml.Linq;

namespace Class05_数组_列表_集合
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //1、列表        List<T> 构造函数
            var names = new List<string> { "sanzk", "Ana", "lisi" };//字符串列表
            foreach (var name in names)
            {
                Console.WriteLine($"HELLO {name.ToUpper()}");
            }


            names.Add("wangwu");//列表中添加项
            names.Remove("Ana");//列表中移除项

            Console.WriteLine("---------------");

            foreach (var name in names)
            {
                Console.WriteLine($"HELLO {name.ToUpper()}");
            }

            Console.WriteLine("---------------");

            for (var i = 0; i < names.Count; i++)
            {
                Console.WriteLine($"HELLO {names[i].ToUpper()}");
            }

            Console.WriteLine("---------------");

            //2、按索引输出列表内容
            Console.WriteLine(names[0]);//索引

            //3、反向查找列表内容的索引
            var index = names.IndexOf("lisi");
            Console.WriteLine($"找到李四在列表索引{index}位置");

            
            Console.WriteLine("-------未排序--------");
            Printlist(names);
            Console.WriteLine("--------未排序-------");
            //4、列表 排序
            names.Sort();
            Console.WriteLine("-------排序之后--------");
            Printlist(names);
            Console.WriteLine("--------排序之后-------");

            var num = new List<int> { 9, 8, 10, 5 };//字符串列表


            Printlist(num);

            num.Sort();

            Print分隔符();

            Printlist(num);

            Print分隔符();

            fibonachinumber();




        }
        //   方法（可以理解为：函数、功能块）的创建，将列表作为参数
        static void Printlist(List<string> lists)
        {
            foreach (var list in lists)
            {
                Console.WriteLine(list);
            }
        }
        static void Printlist1(List<int> lists)
        {
            foreach (var list in lists)
            {
                Console.Write($" {list} ");
            }
        }
        //重载  ，同一个方法名，不同的参数类型
        static void Printlist(List<int> lists)
        {
            foreach (var list in lists)
            {
                Console.WriteLine(list);
            }
        }

        static void Print分隔符()
        {
            Console.WriteLine("---------------");
        }

        /// <summary>
        /// 斐波那契序列
        /// </summary>
        static void fibonachinumber()
        {
            var fibonachiNumber = new List<int> { 1,1};

            while (fibonachiNumber.Count<20)
            {
                var p1 = fibonachiNumber[fibonachiNumber.Count - 1];
                var p2 = fibonachiNumber[fibonachiNumber.Count - 2];
                fibonachiNumber.Add(p1 + p2);//使用断点，和F5（开始调试、继续），可以看到列表每次执行后的变化
                //使用断点 + F11(逐语句)或F10(逐过程)可以看到变化的过程
            }
            
           Printlist1(fibonachiNumber);
        }
        




    }
}